defmodule TuistWeb.BillingLive do
  @moduledoc false
  use TuistWeb, :live_view
  use Noora

  alias Tuist.Accounts
  alias Tuist.Billing

  @impl true
  def mount(params, _uri, %{assigns: %{current_user: current_user, selected_account: selected_account}} = socket) do
    if Tuist.Authorization.authorize(:billing_update, current_user, selected_account) != :ok do
      raise TuistWeb.Errors.UnauthorizedError,
            gettext("You are not authorized to perform this action.")
    end

    subscription = Billing.get_current_active_subscription(selected_account)

    plan =
      if is_nil(subscription) do
        :air
      else
        subscription.plan
      end

    current_month_remote_cache_hits_count = selected_account.current_month_remote_cache_hits_count

    estimated_next_payment =
      Billing.get_estimated_next_payment(%{
        current_month_remote_cache_hits_count: current_month_remote_cache_hits_count
      })

    next_charge_date =
      if is_nil(subscription) do
        gettext("charged /per month")
      else
        gettext("charged on %{next_charge_date}",
          next_charge_date:
            subscription.subscription_id
            |> Billing.get_subscription_current_period_end()
            |> Timex.format!("{Mfull} {D}")
        )
      end

    payment_method =
      with {:subscription, subscription} when not is_nil(subscription) <-
             {:subscription, subscription},
           {:payment_method_id, payment_method_id} when not is_nil(payment_method_id) <-
             {:payment_method_id, Billing.get_payment_method_id_from_subscription_id(subscription.subscription_id)},
           {:payment_method, payment_method} <-
             {:payment_method, Billing.get_payment_method_by_id(payment_method_id)} do
        payment_method
      else
        {:subscription, nil} -> nil
        {:payment_method_id, nil} -> nil
      end

    plan =
      case params["plan"] do
        "pro" -> :pro
        "air" -> :air
        _ -> plan
      end

    socket =
      socket
      |> assign(selected_tab: "billing")
      |> assign(:estimated_next_payment, estimated_next_payment)
      |> assign(:plan, plan)
      |> assign(:next_charge_date, next_charge_date)
      |> assign(:current_month_remote_cache_hits_count, current_month_remote_cache_hits_count)
      |> assign(:head_title, "#{gettext("Billing")} · #{selected_account.name} · Tuist")
      |> assign(:payment_method, payment_method)

    {:ok, socket}
  end

  @impl true
  def handle_params(_params, uri, socket) do
    {:noreply, assign(socket, :uri, uri)}
  end

  @impl true
  def handle_event("change_plan", %{"plan" => plan}, socket) do
    plan = String.to_atom(plan)

    send(self(), :change_plan)

    {:noreply,
     socket
     |> assign(:new_plan, plan)
     |> push_event("close-modal", %{id: "billing-upgrade-modal"})}
  end

  def handle_event("close-billing-upgrade-modal", _, socket) do
    socket = push_event(socket, "close-modal", %{id: "billing-upgrade-modal"})
    {:noreply, socket}
  end

  @impl true
  def handle_info(:change_plan, %{assigns: %{new_plan: new_plan, selected_account: selected_account, uri: uri}} = socket) do
    socket =
      case Billing.update_plan(%{
             plan: new_plan,
             period: :monthly,
             account: Accounts.create_customer_when_absent(selected_account),
             success_url: uri <> "?plan=#{new_plan}"
           }) do
        {:ok, {:external_redirect, session_url}} ->
          redirect(socket, external: session_url)

        :ok ->
          socket
      end

    {
      :noreply,
      assign(socket, :plan, new_plan)
    }
  end

  attr :label, :string, required: true

  def plan_feature(assigns) do
    ~H"""
    <li>
      <div data-part="icon"><.check /></div>
      <span data-part="label">
        {@label}
      </span>
    </li>
    """
  end

  attr :id, :string, required: true
  attr :name, :string, required: true
  attr :description, :string, required: true
  attr :price, :string, required: true
  attr :price_subtitle, :string, default: nil
  attr :features, :list, required: true
  attr :most_popular, :boolean, default: false

  slot :action_button, required: true

  def pricing_card(assigns) do
    ~H"""
    <div class="tuist-pricing-card" data-most-popular={@most_popular}>
      <div :if={@most_popular} data-part="most-popular">
        <span data-part="label">
          {gettext("Most Popular")}
        </span>
        <div data-part="bezel">
          <.notch_svg id={@id <> "-bezel"} />
        </div>
      </div>
      <div data-part="header">
        <span data-part="name">
          {@name}
        </span>
        <span data-part="description">
          {@description}
        </span>
      </div>
      <.line_divider />
      <div data-part="price-with-button">
        <div data-part="price">
          <span data-part="title">{@price}</span>
          <span data-part="subtitle">{@price_subtitle}</span>
        </div>
        {render_slot(@action_button)}
      </div>
      <ul data-part="feature-list">
        <%= for feature <- @features do %>
          <.plan_feature label={feature} />
        <% end %>
      </ul>
    </div>
    """
  end

  attr :id, :string, required: true
  attr :plan, :atom, required: true

  def pricing_cards(assigns) do
    ~H"""
    <.pricing_card
      id={@id <> "-air"}
      name={gettext("Air")}
      description={gettext("Get started with no credit card required")}
      price={gettext("Free")}
      features={[
        gettext("Free under tier limits"),
        gettext("All features, no credit card required"),
        gettext("Community support via forum")
      ]}
    >
      <:action_button>
        <.button :if={@plan == :air} label={gettext("Current plan")} variant="secondary" disabled />
        <.button
          :if={@plan == :pro}
          label={gettext("Downgrade")}
          variant="secondary"
          phx-click="change_plan"
          phx-value-plan={:air}
        />
      </:action_button>
    </.pricing_card>
    <.pricing_card
      most_popular
      id={@id <> "-pro"}
      name={gettext("Pro")}
      description={gettext("Usage-based pricing after free tier")}
      price={gettext("$0")}
      price_subtitle={gettext("and up")}
      features={[
        gettext("Pay nothing if below free tier limits"),
        gettext("Pay only for what you use per feature"),
        gettext("Standard support via Slack and email")
      ]}
    >
      <:action_button>
        <.button :if={@plan == :pro} label={gettext("Current plan")} variant="primary" disabled />
        <.button
          :if={@plan == :air}
          label={gettext("Upgrade")}
          variant="primary"
          phx-click="change_plan"
          phx-value-plan={:pro}
        />
      </:action_button>
    </.pricing_card>
    <.pricing_card
      id={@id <> "-enterprise"}
      name={gettext("Enterprise")}
      description={gettext("Create your plan or self-host your instance")}
      price={gettext("Custom")}
      features={[
        gettext("Custom terms"),
        gettext("On-premise"),
        gettext("Priority support via shared Slack channel")
      ]}
    >
      <:action_button>
        <.button label={gettext("Contact sales")} variant="secondary" href="mailto:contact@tuist.dev" />
      </:action_button>
    </.pricing_card>
    """
  end

  attr :id, :string, required: true

  defp notch_svg(assigns) do
    ~H"""
    <svg width="300" height="22" viewBox="0 0 300 22" fill="none" xmlns="http://www.w3.org/2000/svg">
      <g id={"Vector-#{@id}"} filter={"url(#filter0_dddi_1986_79275-#{@id})"}>
        <path
          d="M300 0H0V17C0 9.8203 5.8203 4 13 4H82.6254C91.462 4 98.548 12.6833 105.979 17.4649C108.472 19.0693 111.44 20 114.625 20H185.347C188.532 20 191.5 19.0693 193.993 17.4649C201.424 12.6832 208.51 4 217.347 4H287C294.18 4 300 9.8203 300 17V0Z"
          fill="#6F2CFF"
        />
        <path
          d="M300 0H0V17C0 9.8203 5.8203 4 13 4H82.6254C91.462 4 98.548 12.6833 105.979 17.4649C108.472 19.0693 111.44 20 114.625 20H185.347C188.532 20 191.5 19.0693 193.993 17.4649C201.424 12.6832 208.51 4 217.347 4H287C294.18 4 300 9.8203 300 17V0Z"
          fill={"url(#paint0_linear_1986_79275-#{@id})"}
          fill-opacity="0.16"
        />
      </g>
      <defs>
        <filter
          id={"filter0_dddi_1986_79275-#{@id}"}
          x="-1"
          y="-1"
          width="302"
          height="23"
          filterUnits="userSpaceOnUse"
          color-interpolation-filters="sRGB"
        >
          <feFlood flood-opacity="0" result="BackgroundImageFix" />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="1" />
          <feGaussianBlur stdDeviation="0.5" />
          <feComposite in2="hardAlpha" operator="out" />
          <feColorMatrix
            type="matrix"
            values="0 0 0 0 0.180392 0 0 0 0 0.2 0 0 0 0 0.219608 0 0 0 0.1 0"
          />
          <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1986_79275" />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset />
          <feComposite in2="hardAlpha" operator="out" />
          <feColorMatrix type="matrix" values="0 0 0 0 0.18 0 0 0 0 0.2 0 0 0 0 0.22 0 0 0 0.08 0" />
          <feBlend
            mode="normal"
            in2="effect1_dropShadow_1986_79275"
            result="effect2_dropShadow_1986_79275"
          />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="1" />
          <feGaussianBlur stdDeviation="0.5" />
          <feComposite in2="hardAlpha" operator="out" />
          <feColorMatrix
            type="matrix"
            values="0 0 0 0 0.0862745 0 0 0 0 0.0941176 0 0 0 0 0.109804 0 0 0 0.05 0"
          />
          <feBlend
            mode="normal"
            in2="effect2_dropShadow_1986_79275"
            result="effect3_dropShadow_1986_79275"
          />
          <feBlend
            mode="normal"
            in="SourceGraphic"
            in2="effect3_dropShadow_1986_79275"
            result="shape"
          />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="-1" />
          <feGaussianBlur stdDeviation="0.5" />
          <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
          <feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0" />
          <feBlend mode="normal" in2="shape" result="effect4_innerShadow_1986_79275" />
        </filter>
        <linearGradient
          id={"paint0_linear_1986_79275-#{@id}"}
          x1="150"
          y1="0"
          x2="150"
          y2="20"
          gradientUnits="userSpaceOnUse"
        >
          <stop stop-color="white" />
          <stop offset="1" stop-color="white" stop-opacity="0" />
        </linearGradient>
      </defs>
    </svg>
    """
  end

  def card_tuist_icon_svg(assigns) do
    ~H"""
    <svg width="45" height="47" viewBox="0 0 45 47" fill="none" xmlns="http://www.w3.org/2000/svg">
      <g filter="url(#filter0_iiii_1546_54521)">
        <mask
          id="path-1-outside-1_1546_54521"
          maskUnits="userSpaceOnUse"
          x="0"
          y="0"
          width="45"
          height="47"
          fill="black"
        >
          <rect fill="white" width="45" height="47" />
          <path d="M41.9777 32.7896C41.9126 32.6955 41.8801 32.6484 41.8363 32.6255C41.7979 32.6054 41.7535 32.5984 41.7108 32.6055C41.662 32.6136 41.6155 32.649 41.5226 32.7197C39.7323 34.0809 37.8466 35.2974 35.8813 36.3203C35.5149 36.511 35.3317 36.6064 35.2501 36.5779C35.1802 36.5535 35.129 36.4916 35.1182 36.4184C35.1055 36.3329 35.2359 36.1679 35.4966 35.8377C38.8624 31.5764 41.5979 26.6438 43.7326 22.0311C43.7558 21.9809 43.7674 21.9558 43.7719 21.9291C43.7758 21.9057 43.7754 21.8812 43.7709 21.8579C43.7657 21.8314 43.7534 21.8068 43.729 21.7575C43.0835 20.4595 42.2959 19.2178 41.4337 18.0665C41.3344 17.9339 41.2848 17.8676 41.2252 17.8479C41.1736 17.8308 41.1161 17.8357 41.0681 17.8613C41.0128 17.8908 40.9745 17.9657 40.898 18.1154C38.5975 22.6162 35.9391 26.9715 32.7301 30.8331C32.6591 30.9167 32.5879 31.0004 32.5164 31.0839C32.2321 31.4158 32.09 31.5818 32.0029 31.5854C31.9283 31.5884 31.8576 31.5491 31.8208 31.4841C31.7778 31.4083 31.8444 31.198 31.9776 30.7774C34.195 23.7752 35.6139 16.5575 36.7178 9.32966C36.7283 9.26128 36.7335 9.22709 36.7278 9.19483C36.7229 9.16653 36.7116 9.139 36.6952 9.11538C36.6766 9.08846 36.6491 9.06802 36.5943 9.02713C35.5486 8.24805 34.4376 7.55213 33.269 6.9514C33.1445 6.88744 33.0823 6.85546 33.0256 6.86002C32.9763 6.86398 32.9291 6.88677 32.8953 6.92294C32.8565 6.96459 32.8427 7.03424 32.815 7.17353C31.6085 13.2562 30.1165 19.2805 28.2198 25.111C27.5276 27.2257 26.7761 29.3156 25.9431 31.3419C25.7866 31.7223 25.7084 31.9126 25.6273 31.9433C25.5581 31.9695 25.4784 31.9548 25.4232 31.9055C25.3585 31.8477 25.3537 31.641 25.3441 31.2275L24.6491 1.38225C24.6467 1.28147 24.6455 1.23108 24.6255 1.19104C24.608 1.15607 24.5799 1.12632 24.546 1.10691C24.5071 1.08467 24.4575 1.08073 24.3584 1.07285C23.7452 1.02411 23.126 1 22.5008 1C21.8755 1 21.2562 1.02352 20.6429 1.07263C20.5439 1.08056 20.4944 1.08453 20.4555 1.10677C20.4216 1.12619 20.3935 1.15595 20.3761 1.19089C20.356 1.23092 20.3549 1.28125 20.3525 1.38192L19.6566 31.2423C19.6471 31.6534 19.6423 31.859 19.5775 31.9168C19.5223 31.966 19.4425 31.9808 19.3733 31.9546C19.2922 31.9237 19.2147 31.7346 19.0596 31.3563C18.2225 29.3141 17.4833 27.2181 16.781 25.1119C14.8843 19.2805 13.3923 13.2562 12.1858 7.17432C12.1581 7.03503 12.1443 6.96538 12.1055 6.92373C12.0717 6.88757 12.0245 6.86478 11.9752 6.86082C11.9185 6.85626 11.8563 6.88824 11.7318 6.9522C10.5632 7.55293 9.45218 8.24885 8.40652 9.02794C8.35165 9.06882 8.32421 9.08926 8.30556 9.11618C8.2892 9.1398 8.2779 9.16733 8.27295 9.19564C8.26731 9.2279 8.27253 9.26209 8.28298 9.33047C9.38747 16.5627 10.8077 23.7856 13.0274 30.7916C13.161 31.2132 13.2278 31.4241 13.1846 31.5C13.1476 31.565 13.0764 31.6043 13.0017 31.6009C12.9144 31.597 12.7732 31.43 12.4908 31.096C12.4171 31.0089 12.3438 30.9216 12.2707 30.8339C9.06239 26.9722 6.40329 22.6169 4.10273 18.116C4.02624 17.9664 3.98799 17.8916 3.93266 17.862C3.88466 17.8364 3.82718 17.8315 3.77554 17.8486C3.71599 17.8683 3.66637 17.9346 3.56712 18.0671C2.70283 19.221 1.91475 20.4652 1.2691 21.7646C1.24473 21.8136 1.23254 21.8381 1.22736 21.8645C1.22282 21.8877 1.22244 21.9122 1.22626 21.9354C1.23061 21.962 1.24215 21.9871 1.26524 22.0375C2.02311 23.69 2.83108 25.322 3.70015 26.9327C5.37916 29.9265 7.29953 33.0142 9.52861 35.8523C9.78662 36.1808 9.91563 36.3451 9.90282 36.4304C9.89185 36.5035 9.84071 36.5652 9.7709 36.5896C9.68941 36.618 9.50744 36.5235 9.14349 36.3344C7.16924 35.3086 5.27583 34.0881 3.47823 32.7206C3.38527 32.6499 3.33879 32.6145 3.29001 32.6064C3.2473 32.5992 3.20294 32.6063 3.16454 32.6263C3.1207 32.6492 3.08813 32.6963 3.02299 32.7905C2.29301 33.846 1.64482 34.9628 1.08917 36.135C1.057 36.2028 1.04092 36.2368 1.03774 36.2723C1.03496 36.3033 1.03975 36.3358 1.05136 36.3647C1.06467 36.3979 1.09022 36.4261 1.14131 36.4826C12.6222 49.1713 32.3753 49.1737 43.8586 36.4826C43.9097 36.4261 43.9353 36.3979 43.9486 36.3647C43.9602 36.3358 43.965 36.3034 43.9622 36.2723C43.959 36.2367 43.9429 36.2028 43.9107 36.1349C43.3545 34.9627 42.7075 33.8453 41.9777 32.7896Z" />
        </mask>
        <path
          d="M32.7301 30.8331L33.4927 31.4801L33.4992 31.4722L32.7301 30.8331ZM28.2198 25.111L29.1702 25.4221L29.1707 25.4204L28.2198 25.111ZM16.781 25.1119L15.83 25.4212L15.8323 25.4281L16.781 25.1119ZM12.2707 30.8339L11.5015 31.4729L11.5026 31.4742L12.2707 30.8339ZM3.70015 26.9327L2.82008 27.4075L2.82396 27.4147L2.82795 27.4218L3.70015 26.9327ZM9.90282 36.4304L8.91389 36.282L9.90282 36.4304ZM9.14349 36.3344L9.60453 35.447L9.14349 36.3344ZM9.7709 36.5896L10.1002 37.5338L9.7709 36.5896ZM1.2691 21.7646L2.16464 22.2096L1.2691 21.7646ZM1.22736 21.8645L0.246087 21.6719L1.22736 21.8645ZM1.26524 22.0375L0.356268 22.4543L1.26524 22.0375ZM1.22626 21.9354L0.239456 22.0974L1.22626 21.9354ZM4.10273 18.116L4.99315 17.6609L4.10273 18.116ZM3.93266 17.862L4.40366 16.9799L3.93266 17.862ZM3.56712 18.0671L4.36749 18.6666L3.56712 18.0671ZM3.77554 17.8486L4.09016 18.7978L3.77554 17.8486ZM13.0274 30.7916L12.0741 31.0936L13.0274 30.7916ZM13.1846 31.5L14.0538 31.9944L13.1846 31.5ZM12.4908 31.096L11.7271 31.7417L12.4908 31.096ZM13.0017 31.6009L13.0466 30.602L13.0017 31.6009ZM8.40652 9.02794L9.00399 9.82983L8.40652 9.02794ZM8.30556 9.11618L7.48355 8.54672L8.30556 9.11618ZM8.28298 9.33047L9.27151 9.1795L8.28298 9.33047ZM8.27295 9.19564L7.28789 9.02345L8.27295 9.19564ZM12.1858 7.17432L11.2049 7.36892L12.1858 7.17432ZM12.1055 6.92373L11.3743 7.60594L12.1055 6.92373ZM11.9752 6.86082L12.0553 5.86402L11.9752 6.86082ZM24.6491 1.38225L23.6493 1.40553L24.6491 1.38225ZM24.6255 1.19104L23.7311 1.63833L24.6255 1.19104ZM24.3584 1.07285L24.2791 2.0697L24.3584 1.07285ZM24.546 1.10691L25.0427 0.238978L24.546 1.10691ZM25.9431 31.3419L26.8679 31.7221L25.9431 31.3419ZM25.6273 31.9433L25.9817 32.8784L25.6273 31.9433ZM25.4232 31.9055L24.757 32.6513L25.4232 31.9055ZM33.269 6.9514L32.8118 7.84077L33.269 6.9514ZM33.0256 6.86002L32.9455 5.86322L33.0256 6.86002ZM32.815 7.17353L31.8341 6.97896L32.815 7.17353ZM32.8953 6.92294L33.6265 7.60513L32.8953 6.92294ZM36.7178 9.32966L35.7293 9.17869L36.7178 9.32966ZM36.7278 9.19483L35.7428 9.36702L36.7278 9.19483ZM36.5943 9.02713L37.1917 8.22524L36.5943 9.02713ZM36.6952 9.11538L37.5173 8.54591L36.6952 9.11538ZM41.4337 18.0665L40.6333 18.6659L41.4337 18.0665ZM41.2252 17.8479L40.9106 18.7971L41.2252 17.8479ZM40.898 18.1154L41.7884 18.5705L40.898 18.1154ZM41.0681 17.8613L41.5391 18.7434L41.0681 17.8613ZM19.6566 31.2423L20.6564 31.2656L19.6566 31.2423ZM19.5775 31.9168L20.2434 32.6628L19.5775 31.9168ZM19.0596 31.3563L18.1343 31.7356L19.0596 31.3563ZM19.3733 31.9546L19.0182 32.8894L19.3733 31.9546ZM43.8586 36.4826L44.6001 37.1536L43.8586 36.4826ZM43.9486 36.3647L44.8765 36.7375L43.9486 36.3647ZM43.9107 36.1349L44.8142 35.7062L43.9107 36.1349ZM43.9622 36.2723L44.9582 36.183L43.9622 36.2723ZM43.7326 22.0311L42.825 21.6111L43.7326 22.0311ZM43.7719 21.9291L42.7855 21.7649L43.7719 21.9291ZM43.729 21.7575L44.6244 21.3123L43.729 21.7575ZM43.7709 21.8579L42.7894 22.0497L43.7709 21.8579ZM20.6429 1.07263L20.7227 2.06944L20.6429 1.07263ZM20.4555 1.10677L20.9526 1.9745L20.4555 1.10677ZM20.3525 1.38192L21.3523 1.40522L20.3525 1.38192ZM20.3761 1.19089L21.2705 1.63803L20.3761 1.19089ZM1.08917 36.135L1.99278 36.5633L1.08917 36.135ZM1.03774 36.2723L0.0417156 36.1832L1.03774 36.2723ZM1.14131 36.4826L0.399793 37.1535L1.14131 36.4826ZM1.05136 36.3647L1.97927 35.9919L1.05136 36.3647ZM35.8813 36.3203L36.343 37.2074L35.8813 36.3203ZM35.2501 36.5779L34.9205 37.522L35.2501 36.5779ZM35.4966 35.8377L36.2814 36.4576L35.4966 35.8377ZM35.1182 36.4184L34.129 36.5651L35.1182 36.4184ZM32.5164 31.0839L33.276 31.7342L32.5164 31.0839ZM32.0029 31.5854L32.0436 32.5846L32.0029 31.5854ZM31.9776 30.7774L31.0243 30.4755L31.9776 30.7774ZM31.8208 31.4841L30.9507 31.977L31.8208 31.4841ZM3.47823 32.7206L2.87278 33.5165L3.47823 32.7206ZM3.29001 32.6064L3.45476 31.62L3.29001 32.6064ZM3.02299 32.7905L2.20051 32.2217L3.02299 32.7905ZM3.16454 32.6263L2.70194 31.7397L3.16454 32.6263ZM41.5226 32.7197L42.1278 33.5157L41.5226 32.7197ZM41.7108 32.6055L41.5463 31.6191L41.7108 32.6055ZM41.9777 32.7896L41.1552 33.3583L41.9777 32.7896ZM41.8363 32.6255L42.299 31.739L41.8363 32.6255ZM40.9173 31.9236C39.1675 33.2541 37.3296 34.4392 35.4196 35.4333L36.343 37.2074C38.3637 36.1557 40.2971 34.9077 42.1278 33.5157L40.9173 31.9236ZM36.2814 36.4576C39.7119 32.1143 42.4856 27.1067 44.6401 22.4511L42.825 21.6111C40.7102 26.1809 38.0129 31.0386 34.7119 35.2179L36.2814 36.4576ZM44.6244 21.3123C43.9483 19.9526 43.1272 18.6596 42.2341 17.467L40.6333 18.6659C41.4646 19.776 42.2188 20.9664 42.8335 22.2027L44.6244 21.3123ZM40.0076 17.6602C37.7289 22.1184 35.1089 26.4059 31.961 30.1939L33.4992 31.4722C36.7694 27.537 39.4661 23.1139 41.7884 18.5705L40.0076 17.6602ZM31.9676 30.1861C31.8975 30.2687 31.8273 30.3512 31.7568 30.4335L33.276 31.7342C33.3485 31.6496 33.4207 31.5648 33.4927 31.48L31.9676 30.1861ZM32.9309 31.0793C35.1702 24.0081 36.5986 16.7339 37.7064 9.48064L35.7293 9.17869C34.6293 16.3811 33.2197 23.5424 31.0243 30.4755L32.9309 31.0793ZM37.1917 8.22524C36.1027 7.41385 34.9449 6.68851 33.7262 6.06202L32.8118 7.84077C33.9303 8.41575 34.9945 9.08224 35.9968 9.82902L37.1917 8.22524ZM31.8341 6.97896C30.6335 13.0316 29.1508 19.0164 27.2688 24.8017L29.1707 25.4204C31.0822 19.5445 32.5834 13.4808 33.7959 7.3681L31.8341 6.97896ZM27.2694 24.8C26.583 26.8969 25.8399 28.9629 25.0182 30.9616L26.8679 31.7221C27.7124 29.6683 28.4722 27.5546 29.1702 25.4221L27.2694 24.8ZM26.3438 31.2043L25.6488 1.35897L23.6493 1.40553L24.3443 31.2508L26.3438 31.2043ZM24.4376 0.0759925C23.7973 0.0251019 23.1517 0 22.5008 0V2C23.1002 2 23.693 2.02312 24.2791 2.0697L24.4376 0.0759925ZM22.5008 0C21.8504 0 21.2044 0.0244576 20.563 0.0758259L20.7227 2.06944C21.3079 2.02257 21.9006 2 22.5008 2V0ZM19.3528 1.35862L18.6569 31.219L20.6564 31.2656L21.3523 1.40522L19.3528 1.35862ZM19.9849 30.9771C19.16 28.9645 18.4287 26.8923 17.7297 24.7956L15.8323 25.4281C16.5378 27.544 17.2851 29.6638 18.1343 31.7356L19.9849 30.9771ZM17.732 24.8025C15.85 19.0165 14.3673 13.0316 13.1667 6.97973L11.2049 7.36892C12.4174 13.4808 13.9186 19.5445 15.83 25.4212L17.732 24.8025ZM11.2747 6.06282C10.0559 6.68931 8.89807 7.41465 7.80905 8.22604L9.00399 9.82983C10.0063 9.08304 11.0705 8.41655 12.189 7.84157L11.2747 6.06282ZM7.29444 9.48143C8.40282 16.7392 9.8325 24.0184 12.0741 31.0936L13.9807 30.4896C11.7829 23.5527 10.3721 16.3863 9.27151 9.1795L7.29444 9.48143ZM13.2544 30.4503C13.1822 30.365 13.1104 30.2794 13.0388 30.1935L11.5026 31.4742C11.5772 31.5637 11.652 31.6529 11.7271 31.7417L13.2544 30.4503ZM13.0398 30.1948C9.89261 26.4067 7.27188 22.1191 4.99315 17.6609L3.2123 18.5712C5.5347 23.1148 8.23217 27.5378 11.5015 31.4729L13.0398 30.1948ZM2.76675 17.4676C1.87128 18.6631 1.04977 19.9587 0.37357 21.3196L2.16464 22.2096C2.77974 20.9717 3.53438 19.7789 4.36749 18.6666L2.76675 17.4676ZM0.356268 22.4543C1.12242 24.1249 1.93995 25.7764 2.82008 27.4075L4.58021 26.4578C3.7222 24.8676 2.92381 23.2551 2.17421 21.6206L0.356268 22.4543ZM2.82795 27.4218C4.52115 30.441 6.46981 33.5768 8.74218 36.47L10.315 35.2346C8.12925 32.4517 6.23717 29.4121 4.57235 26.4435L2.82795 27.4218ZM9.60453 35.447C7.68588 34.4501 5.84051 33.2611 4.08367 31.9247L2.87278 33.5165C4.71116 34.915 6.6526 36.1671 8.68246 37.2217L9.60453 35.447ZM2.20051 32.2217C1.44034 33.3209 0.764864 34.4846 0.185565 35.7066L1.99278 36.5633C2.52478 35.4411 3.14568 34.3712 3.84547 33.3593L2.20051 32.2217ZM0.399793 37.1535C12.2777 50.2809 32.7198 50.2834 44.6001 37.1536L43.1171 35.8117C32.0308 48.0639 12.9668 48.0616 1.88283 35.8116L0.399793 37.1535ZM44.8142 35.7062C44.2347 34.485 43.5606 33.3208 42.8003 32.221L41.1552 33.3583C41.8544 34.3698 42.4743 35.4404 43.0072 36.5636L44.8142 35.7062ZM8.74218 36.47C8.80785 36.5536 8.86008 36.6201 8.90371 36.6771C8.94807 36.7351 8.97427 36.7711 8.98953 36.7936C8.99664 36.8041 8.9978 36.8065 8.99537 36.8023C8.99333 36.7988 8.98329 36.7816 8.97083 36.7533C8.95891 36.7262 8.93784 36.6735 8.92254 36.601C8.90708 36.5277 8.89374 36.4163 8.91389 36.282L10.8918 36.5788C10.9365 36.2809 10.8445 36.0454 10.8012 35.9473C10.751 35.8332 10.689 35.7364 10.645 35.6714C10.5575 35.5424 10.4338 35.3858 10.315 35.2346L8.74218 36.47ZM8.68246 37.2217C8.84944 37.3085 9.02436 37.4001 9.16644 37.4615C9.23806 37.4924 9.34476 37.5352 9.46675 37.5631C9.57344 37.5875 9.81907 37.6318 10.1002 37.5338L9.4416 35.6454C9.56753 35.6014 9.6778 35.5934 9.75287 35.5947C9.82705 35.596 9.88301 35.6067 9.91258 35.6134C9.94336 35.6205 9.96287 35.6273 9.96736 35.6289C9.97258 35.6307 9.97076 35.6303 9.95979 35.6256C9.93614 35.6154 9.8972 35.597 9.83342 35.5649C9.77071 35.5333 9.69722 35.4951 9.60453 35.447L8.68246 37.2217ZM8.91389 36.282C8.95801 35.988 9.16084 35.7433 9.4416 35.6454L10.1002 37.5338C10.5206 37.3872 10.8257 37.0191 10.8918 36.5788L8.91389 36.282ZM0.37357 21.3196C0.372785 21.3211 0.283134 21.4832 0.246087 21.6719L2.20864 22.0571C2.19283 22.1377 2.16908 22.1964 2.15865 22.2205C2.15411 22.231 2.15132 22.2366 2.15314 22.2328C2.15507 22.2288 2.15789 22.2231 2.16464 22.2096L0.37357 21.3196ZM2.17421 21.6206C2.16782 21.6067 2.16511 21.6007 2.16323 21.5965C2.16145 21.5925 2.16398 21.598 2.16811 21.6084C2.17751 21.6321 2.19966 21.6918 2.21306 21.7735L0.239456 22.0974C0.270641 22.2874 0.355695 22.4531 0.356268 22.4543L2.17421 21.6206ZM0.246087 21.6719C0.218598 21.812 0.216345 21.9565 0.239456 22.0974L2.21306 21.7735C2.22853 21.8678 2.22704 21.9634 2.20864 22.0571L0.246087 21.6719ZM4.99315 17.6609C4.96384 17.6036 4.91114 17.4982 4.85452 17.4088C4.79761 17.319 4.66057 17.1171 4.40366 16.9799L3.46166 18.7442C3.35953 18.6896 3.28675 18.6249 3.23955 18.5742C3.19567 18.527 3.17107 18.4887 3.165 18.4791C3.15853 18.4689 3.15875 18.4682 3.16926 18.4879C3.17955 18.5072 3.19202 18.5315 3.2123 18.5712L4.99315 17.6609ZM4.36749 18.6666C4.39386 18.6314 4.40986 18.6101 4.42289 18.5933C4.43619 18.5762 4.43583 18.5776 4.42721 18.5871C4.41896 18.5962 4.30499 18.7266 4.09016 18.7978L3.46092 16.8994C3.18654 16.9903 3.01799 17.1638 2.94522 17.2441C2.87411 17.3225 2.80449 17.4172 2.76675 17.4676L4.36749 18.6666ZM4.40366 16.9799C4.11403 16.8253 3.77257 16.7961 3.46092 16.8994L4.09016 18.7978C3.88179 18.8669 3.6553 18.8476 3.46166 18.7442L4.40366 16.9799ZM12.0741 31.0936C12.108 31.2008 12.1353 31.2868 12.1575 31.3601C12.1802 31.4346 12.1933 31.4819 12.2007 31.5122C12.2042 31.5264 12.2048 31.5308 12.2043 31.5278C12.2039 31.5257 12.2007 31.5075 12.1989 31.4778C12.1972 31.4498 12.1955 31.3931 12.2064 31.3189C12.2174 31.2444 12.2445 31.1302 12.3153 31.0056L14.0538 31.9944C14.2088 31.7219 14.2014 31.4581 14.1951 31.3553C14.1875 31.2305 14.1629 31.1168 14.1438 31.0387C14.1058 30.8826 14.0426 30.685 13.9807 30.4896L12.0741 31.0936ZM11.7271 31.7417C11.8578 31.8962 11.9904 32.054 12.1018 32.1687C12.1576 32.2262 12.2407 32.3075 12.3426 32.3805C12.4276 32.4413 12.6458 32.586 12.9568 32.5999L13.0466 30.602C13.1882 30.6083 13.2984 30.6456 13.3676 30.6759C13.4363 30.706 13.4837 30.7377 13.5069 30.7543C13.5314 30.7718 13.5454 30.7845 13.5474 30.7863C13.55 30.7886 13.5469 30.786 13.537 30.7758C13.5159 30.7541 13.4835 30.7185 13.4332 30.6604C13.3837 30.6032 13.3262 30.5352 13.2544 30.4503L11.7271 31.7417ZM12.3153 31.0056C12.4641 30.744 12.746 30.5884 13.0466 30.602L12.9568 32.5999C13.4068 32.6202 13.8311 32.386 14.0538 31.9944L12.3153 31.0056ZM7.80905 8.22604C7.80875 8.22627 7.61734 8.35359 7.48355 8.54672L9.12757 9.68565C9.06967 9.76924 9.01128 9.82131 8.98856 9.84055C8.97849 9.84907 8.97292 9.85317 8.97747 9.8497C8.98219 9.84609 8.98886 9.8411 9.00399 9.82983L7.80905 8.22604ZM9.27151 9.1795C9.26864 9.16068 9.26736 9.15222 9.26651 9.14612C9.26568 9.14022 9.26673 9.1468 9.26789 9.15966C9.27048 9.18834 9.27567 9.26682 9.25801 9.36783L7.28789 9.02345C7.26459 9.15672 7.26958 9.26842 7.27598 9.33935C7.28129 9.3982 7.29101 9.45901 7.29444 9.48143L9.27151 9.1795ZM7.48355 8.54672C7.38471 8.68939 7.31777 8.85247 7.28789 9.02345L9.25801 9.36783C9.23802 9.48219 9.19369 9.59021 9.12757 9.68565L7.48355 8.54672ZM13.1667 6.97973C13.1565 6.92846 13.1367 6.8239 13.1093 6.73041C13.0795 6.62921 13.0109 6.42834 12.8366 6.24153L11.3743 7.60594C11.2389 7.46078 11.1966 7.31556 11.1904 7.29442C11.1864 7.28058 11.186 7.2767 11.1896 7.29362C11.1932 7.3103 11.1975 7.33163 11.2049 7.36892L13.1667 6.97973ZM12.189 7.84157C12.2224 7.82442 12.2412 7.81477 12.256 7.80748C12.2711 7.80008 12.2672 7.80248 12.2532 7.80812C12.2302 7.81741 12.0911 7.87334 11.8952 7.85761L12.0553 5.86402C11.8026 5.84374 11.604 5.91338 11.5046 5.9535C11.4141 5.99004 11.32 6.03949 11.2747 6.06282L12.189 7.84157ZM12.8366 6.24153C12.6327 6.02295 12.3533 5.88795 12.0553 5.86402L11.8952 7.85761C11.6958 7.8416 11.5108 7.75219 11.3743 7.60594L12.8366 6.24153ZM25.6488 1.35897C25.648 1.32429 25.6468 1.24056 25.6387 1.16208C25.6294 1.07045 25.6053 0.914537 25.5199 0.743737L23.7311 1.63833C23.6657 1.50758 23.6523 1.39688 23.6491 1.36565C23.6476 1.35052 23.6476 1.34375 23.648 1.35403C23.6484 1.36436 23.6487 1.37813 23.6493 1.40553L25.6488 1.35897ZM24.2791 2.0697C24.3062 2.07185 24.3195 2.07294 24.3294 2.07388C24.3393 2.07482 24.3321 2.07438 24.3166 2.0719C24.2839 2.06666 24.1749 2.04674 24.0493 1.97484L25.0427 0.238978C24.8782 0.144839 24.725 0.111833 24.633 0.097088C24.5549 0.0845782 24.4714 0.0786795 24.4376 0.0759925L24.2791 2.0697ZM25.5199 0.743737C25.4142 0.532421 25.2477 0.356329 25.0427 0.238978L24.0493 1.97484C23.9121 1.89632 23.8018 1.77972 23.7311 1.63833L25.5199 0.743737ZM25.0182 30.9616C24.9783 31.0585 24.9467 31.1353 24.9191 31.2001C24.8911 31.266 24.8731 31.3052 24.8617 31.3282C24.8563 31.3389 24.8553 31.3404 24.8581 31.3355C24.8606 31.3313 24.8712 31.3133 24.8903 31.2879C24.9087 31.2635 24.9449 31.219 25.0011 31.1701C25.0581 31.1204 25.148 31.0556 25.2729 31.0082L25.9817 32.8784C26.261 32.7726 26.421 32.5799 26.4874 32.4918C26.5631 32.3914 26.6173 32.2894 26.6522 32.2193C26.7214 32.0802 26.7962 31.8967 26.8679 31.7221L25.0182 30.9616ZM24.3443 31.2508C24.3488 31.4406 24.3527 31.6394 24.3675 31.7943C24.3749 31.8724 24.3888 31.9871 24.4233 32.1079C24.4534 32.2133 24.5335 32.4516 24.757 32.6513L26.0894 31.1596C26.1895 31.2491 26.2503 31.3424 26.2856 31.4091C26.3204 31.4751 26.3381 31.5295 26.3465 31.5587C26.3551 31.5891 26.3586 31.6095 26.3593 31.6141C26.3602 31.6194 26.3597 31.6175 26.3585 31.6054C26.356 31.5793 26.3533 31.5359 26.3507 31.4639C26.3482 31.3931 26.3462 31.3095 26.3438 31.2043L24.3443 31.2508ZM25.2729 31.0082C25.5526 30.9022 25.8663 30.9604 26.0894 31.1596L24.757 32.6513C25.0905 32.9491 25.5636 33.0369 25.9817 32.8784L25.2729 31.0082ZM33.7262 6.06202C33.6808 6.03869 33.5867 5.98924 33.4962 5.9527C33.3968 5.91258 33.1982 5.84294 32.9455 5.86322L33.1056 7.85681C32.9097 7.87254 32.7706 7.81661 32.7476 7.80732C32.7336 7.80168 32.7298 7.79928 32.7448 7.80668C32.7596 7.81397 32.7784 7.82362 32.8118 7.84077L33.7262 6.06202ZM33.7959 7.3681C33.8033 7.33082 33.8076 7.30949 33.8112 7.29281C33.8148 7.27588 33.8144 7.27977 33.8104 7.2936C33.8042 7.31474 33.7619 7.45997 33.6265 7.60513L32.1642 6.24074C31.9899 6.42756 31.9213 6.62844 31.8915 6.72964C31.8641 6.82312 31.8443 6.92769 31.8341 6.97896L33.7959 7.3681ZM32.9455 5.86322C32.6475 5.88715 32.3681 6.02215 32.1642 6.24074L33.6265 7.60513C33.49 7.75139 33.305 7.8408 33.1056 7.85681L32.9455 5.86322ZM37.7064 9.48064C37.7098 9.45822 37.7195 9.39741 37.7248 9.33855C37.7312 9.26762 37.7362 9.15592 37.7129 9.02265L35.7428 9.36702C35.7251 9.26601 35.7303 9.18753 35.7329 9.15885C35.7341 9.14599 35.7351 9.13941 35.7343 9.14531C35.7334 9.15141 35.7322 9.15987 35.7293 9.17869L37.7064 9.48064ZM35.9968 9.82902C36.0119 9.84029 36.0186 9.84529 36.0233 9.84889C36.0279 9.85237 36.0223 9.84827 36.0122 9.83974C35.9895 9.82051 35.9311 9.76843 35.8732 9.68484L37.5173 8.54591C37.3835 8.35279 37.192 8.22547 37.1917 8.22524L35.9968 9.82902ZM37.7129 9.02265C37.683 8.85167 37.6161 8.68859 37.5173 8.54591L35.8732 9.68484C35.8071 9.58941 35.7628 9.48139 35.7428 9.36702L37.7129 9.02265ZM42.2341 17.467C42.1964 17.4166 42.1268 17.3219 42.0556 17.2434C41.9829 17.1632 41.8144 16.9897 41.5399 16.8987L40.9106 18.7971C40.6957 18.7258 40.5817 18.5953 40.5735 18.5863C40.5649 18.5768 40.5645 18.5754 40.5778 18.5926C40.5909 18.6093 40.6069 18.6307 40.6333 18.6659L42.2341 17.467ZM41.7884 18.5705C41.8087 18.5308 41.8212 18.5065 41.8315 18.4871C41.842 18.4674 41.8422 18.4682 41.8358 18.4784C41.8297 18.488 41.8051 18.5262 41.7612 18.5734C41.714 18.6242 41.6412 18.6889 41.5391 18.7434L40.5971 16.9791C40.3402 17.1163 40.2031 17.3183 40.1462 17.4081C40.0896 17.4975 40.0369 17.6029 40.0076 17.6602L41.7884 18.5705ZM41.5399 16.8987C41.2283 16.7954 40.8868 16.8245 40.5971 16.9791L41.5391 18.7434C41.3454 18.8468 41.1189 18.8662 40.9106 18.7971L41.5399 16.8987ZM18.6569 31.219C18.6545 31.3237 18.6525 31.4067 18.65 31.477C18.6474 31.5486 18.6447 31.5915 18.6423 31.6171C18.6412 31.629 18.6407 31.6307 18.6416 31.6251C18.6424 31.6203 18.6458 31.5997 18.6546 31.5691C18.6631 31.5396 18.6809 31.4851 18.7159 31.4192C18.7513 31.3524 18.812 31.2597 18.9116 31.1708L20.2434 32.6628C20.4662 32.4639 20.5466 32.2268 20.5771 32.1206C20.6118 31.9996 20.6258 31.885 20.6333 31.807C20.648 31.6523 20.652 31.4542 20.6564 31.2656L18.6569 31.219ZM18.1343 31.7356C18.2054 31.9089 18.2797 32.0919 18.3487 32.2307C18.3835 32.3008 18.4376 32.4028 18.5135 32.5034C18.5804 32.5922 18.7401 32.7837 19.0182 32.8894L19.7284 31.0197C19.8525 31.0669 19.9421 31.1313 19.9992 31.181C20.0555 31.2299 20.0917 31.2745 20.1103 31.2991C20.1296 31.3247 20.1403 31.3429 20.1429 31.3473C20.1459 31.3524 20.1449 31.3512 20.1397 31.3408C20.1285 31.3181 20.1108 31.2794 20.083 31.214C20.0557 31.1497 20.0244 31.0734 19.9849 30.9771L18.1343 31.7356ZM18.9116 31.1708C19.1349 30.9715 19.4487 30.9135 19.7284 31.0197L19.0182 32.8894C19.4363 33.0482 19.9098 32.9606 20.2434 32.6628L18.9116 31.1708ZM44.6001 37.1536C44.617 37.1349 44.6624 37.0855 44.7022 37.0352C44.75 36.9747 44.8213 36.875 44.8765 36.7375L43.0207 35.992C43.0626 35.8876 43.1144 35.8186 43.1334 35.7947C43.1419 35.7839 43.1466 35.7788 43.1422 35.7838C43.1376 35.7891 43.1311 35.7962 43.1171 35.8117L44.6001 37.1536ZM43.0072 36.5636C43.0161 36.5822 43.0201 36.5906 43.0228 36.5967C43.0255 36.6026 43.0223 36.5959 43.0171 36.5828C43.0054 36.5531 42.9762 36.4726 42.9662 36.3617L44.9582 36.183C44.9451 36.0365 44.9062 35.9212 44.8775 35.8487C44.8539 35.7888 44.8247 35.7284 44.8142 35.7062L43.0072 36.5636ZM44.8765 36.7375C44.947 36.5621 44.9751 36.3712 44.9582 36.183L42.9662 36.3617C42.9549 36.2355 42.9734 36.1096 43.0207 35.992L44.8765 36.7375ZM44.6401 22.4511C44.6407 22.4497 44.7266 22.284 44.7583 22.0933L42.7855 21.7649C42.7991 21.6832 42.8214 21.6233 42.831 21.5993C42.8352 21.5888 42.8378 21.5832 42.836 21.5872C42.8342 21.5913 42.8315 21.5972 42.825 21.6111L44.6401 22.4511ZM42.8335 22.2027C42.8403 22.2164 42.8432 22.2221 42.8451 22.2261C42.8469 22.2299 42.8441 22.2243 42.8396 22.2138C42.8291 22.1896 42.8052 22.1306 42.7894 22.0497L44.7523 21.6661C44.7153 21.4765 44.6251 21.3138 44.6244 21.3123L42.8335 22.2027ZM44.7583 22.0933C44.7818 21.952 44.7798 21.8068 44.7523 21.6661L42.7894 22.0497C42.771 21.9555 42.7697 21.8595 42.7855 21.7649L44.7583 22.0933ZM20.563 0.0758259C20.5293 0.0785265 20.4459 0.0844715 20.3678 0.0970294C20.2757 0.111844 20.1228 0.144944 19.9585 0.239046L20.9526 1.9745C20.8271 2.04635 20.7184 2.06635 20.6855 2.07164C20.67 2.07413 20.6627 2.07458 20.6725 2.07364C20.6824 2.07269 20.6957 2.0716 20.7227 2.06944L20.563 0.0758259ZM21.3523 1.40522C21.3529 1.37784 21.3532 1.36411 21.3536 1.35379C21.354 1.34354 21.354 1.35033 21.3525 1.36548C21.3493 1.39678 21.3358 1.50739 21.2705 1.63803L19.4816 0.743738C19.3963 0.914415 19.3722 1.07021 19.3629 1.16185C19.3548 1.2403 19.3536 1.32399 19.3528 1.35862L21.3523 1.40522ZM19.9585 0.239046C19.7536 0.356425 19.5872 0.532506 19.4816 0.743738L21.2705 1.63803C21.1999 1.77939 21.0897 1.89595 20.9526 1.9745L19.9585 0.239046ZM0.185565 35.7066C0.175054 35.7288 0.145854 35.7892 0.122254 35.849C0.0936721 35.9215 0.0548153 36.0368 0.0417156 36.1832L2.03376 36.3614C2.02384 36.4723 1.99462 36.5528 1.98292 36.5825C1.97772 36.5957 1.97453 36.6023 1.97721 36.5964C1.97997 36.5904 1.98393 36.582 1.99278 36.5633L0.185565 35.7066ZM1.88283 35.8116C1.8688 35.7961 1.86238 35.789 1.85778 35.7838C1.85331 35.7787 1.85804 35.7838 1.86659 35.7947C1.88552 35.8186 1.93734 35.8875 1.97927 35.9919L0.123447 36.7375C0.178695 36.875 0.249939 36.9746 0.297745 37.0351C0.337542 37.0854 0.382918 37.1348 0.399793 37.1535L1.88283 35.8116ZM0.0417156 36.1832C0.0248776 36.3714 0.0530074 36.5622 0.123447 36.7375L1.97927 35.9919C2.0265 36.1095 2.04505 36.2353 2.03376 36.3614L0.0417156 36.1832ZM35.4196 35.4333C35.3263 35.4818 35.2523 35.5203 35.1891 35.5522C35.1248 35.5847 35.0854 35.6033 35.0613 35.6137C35.0501 35.6186 35.0481 35.6191 35.0531 35.6173C35.0573 35.6158 35.0767 35.609 35.1073 35.602C35.1367 35.5952 35.1926 35.5844 35.2669 35.583C35.342 35.5816 35.4529 35.5895 35.5797 35.6338L34.9205 37.522C35.203 37.6206 35.4498 37.5754 35.556 37.551C35.6779 37.5229 35.7847 37.4799 35.8565 37.4488C35.999 37.3871 36.1747 37.2949 36.343 37.2074L35.4196 35.4333ZM34.7119 35.2179C34.5918 35.37 34.467 35.5269 34.3788 35.6562C34.3345 35.7212 34.2721 35.8179 34.2215 35.9319C34.1782 36.0294 34.0846 36.2657 34.129 36.5651L36.1074 36.2717C36.1274 36.4069 36.1136 36.5188 36.0979 36.5921C36.0823 36.6647 36.061 36.7173 36.0491 36.7442C36.0366 36.7723 36.0266 36.7894 36.0247 36.7926C36.0223 36.7966 36.0236 36.7941 36.0309 36.7834C36.0465 36.7605 36.0731 36.7241 36.118 36.6658C36.1622 36.6085 36.215 36.5416 36.2814 36.4576L34.7119 35.2179ZM35.5797 35.6338C35.8608 35.7319 36.0637 35.9772 36.1074 36.2717L34.129 36.5651C34.1944 37.0061 34.4996 37.3751 34.9205 37.522L35.5797 35.6338ZM31.7568 30.4335C31.6845 30.5179 31.6266 30.5855 31.5768 30.6423C31.5261 30.7 31.4935 30.7355 31.4723 30.7571C31.4623 30.7673 31.4592 30.7699 31.4617 30.7676C31.4637 30.7659 31.4777 30.7533 31.5021 30.736C31.5253 30.7196 31.5727 30.6883 31.6414 30.6586C31.7104 30.6287 31.8207 30.592 31.9623 30.5862L32.0436 32.5846C32.3542 32.5719 32.5729 32.4284 32.6577 32.3684C32.7598 32.2962 32.8432 32.2155 32.8992 32.1585C33.0111 32.0446 33.1445 31.8879 33.276 31.7342L31.7568 30.4335ZM31.0243 30.4755C30.9625 30.6704 30.8995 30.8675 30.8616 31.0233C30.8426 31.1012 30.818 31.2146 30.8103 31.3392C30.804 31.4417 30.7965 31.7049 30.9507 31.977L32.6909 30.9912C32.7614 31.1157 32.7882 31.2296 32.7991 31.304C32.81 31.3779 32.8083 31.4346 32.8065 31.4625C32.8047 31.492 32.8015 31.5102 32.8011 31.5124C32.8006 31.5154 32.8013 31.5109 32.8047 31.4967C32.8121 31.4666 32.8252 31.4194 32.8477 31.3451C32.87 31.2719 32.8971 31.1861 32.9309 31.0793L31.0243 30.4755ZM31.9623 30.5862C32.2621 30.574 32.543 30.7302 32.6909 30.9912L30.9507 31.977C31.1722 32.3681 31.5944 32.6028 32.0436 32.5846L31.9623 30.5862ZM4.08367 31.9247C4.05062 31.8995 3.97753 31.8429 3.90501 31.7967C3.82307 31.7445 3.66797 31.6556 3.45476 31.62L3.12526 33.5927C2.96083 33.5652 2.85336 33.4981 2.8301 33.4833C2.81759 33.4753 2.81328 33.4717 2.82378 33.4795C2.83424 33.4872 2.84769 33.4974 2.87278 33.5165L4.08367 31.9247ZM3.84547 33.3593C3.86309 33.3338 3.87235 33.3204 3.87955 33.3104C3.88676 33.3003 3.88334 33.3056 3.87342 33.3177C3.85397 33.3413 3.77289 33.4368 3.62715 33.5129L2.70194 31.7397C2.51235 31.8387 2.39306 31.9692 2.33008 32.0456C2.27521 32.1122 2.22338 32.1886 2.20051 32.2217L3.84547 33.3593ZM3.45476 31.62C3.19764 31.5771 2.93305 31.6192 2.70194 31.7397L3.62715 33.5129C3.47282 33.5934 3.29695 33.6214 3.12526 33.5927L3.45476 31.62ZM42.1278 33.5157C42.1529 33.4966 42.1664 33.4864 42.1768 33.4787C42.1873 33.471 42.183 33.4746 42.1705 33.4826C42.1472 33.4974 42.0397 33.5645 41.8753 33.5919L41.5463 31.6191C41.3331 31.6547 41.178 31.7435 41.096 31.7957C41.0235 31.8419 40.9504 31.8985 40.9173 31.9236L42.1278 33.5157ZM42.8003 32.221C42.7775 32.1879 42.7256 32.1115 42.6708 32.0449C42.6078 31.9685 42.4885 31.8379 42.299 31.739L41.3735 33.512C41.2278 33.4359 41.1467 33.3404 41.1273 33.3167C41.1173 33.3047 41.1139 33.2994 41.1211 33.3094C41.1283 33.3195 41.1375 33.3328 41.1552 33.3583L42.8003 32.221ZM41.8753 33.5919C41.7036 33.6205 41.5278 33.5925 41.3735 33.512L42.299 31.739C42.0679 31.6184 41.8034 31.5762 41.5463 31.6191L41.8753 33.5919Z"
          fill="url(#paint0_linear_1546_54521)"
          mask="url(#path-1-outside-1_1546_54521)"
        />
      </g>
      <defs>
        <filter
          id="filter0_iiii_1546_54521"
          x="0.0371094"
          y="0"
          width="44.9258"
          height="49.7"
          filterUnits="userSpaceOnUse"
          color-interpolation-filters="sRGB"
        >
          <feFlood flood-opacity="0" result="BackgroundImageFix" />
          <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="0.225" />
          <feGaussianBlur stdDeviation="0.1125" />
          <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
          <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.16 0" />
          <feBlend mode="normal" in2="shape" result="effect1_innerShadow_1546_54521" />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="0.675" />
          <feGaussianBlur stdDeviation="0.3375" />
          <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
          <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
          <feBlend
            mode="normal"
            in2="effect1_innerShadow_1546_54521"
            result="effect2_innerShadow_1546_54521"
          />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="1.35" />
          <feGaussianBlur stdDeviation="0.675" />
          <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
          <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" />
          <feBlend
            mode="normal"
            in2="effect2_innerShadow_1546_54521"
            result="effect3_innerShadow_1546_54521"
          />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="2.7" />
          <feGaussianBlur stdDeviation="1.35" />
          <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
          <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" />
          <feBlend
            mode="normal"
            in2="effect3_innerShadow_1546_54521"
            result="effect4_innerShadow_1546_54521"
          />
        </filter>
        <linearGradient
          id="paint0_linear_1546_54521"
          x1="10.8286"
          y1="5.53999"
          x2="44.282"
          y2="38.7102"
          gradientUnits="userSpaceOnUse"
        >
          <stop stop-color="#E5E5E5" />
          <stop offset="1" stop-color="#BDBDBD" />
        </linearGradient>
      </defs>
    </svg>
    """
  end

  def master_card_logo_svg(assigns) do
    ~H"""
    <svg width="68" height="43" viewBox="0 0 68 43" fill="none" xmlns="http://www.w3.org/2000/svg">
      <g filter="url(#filter0_iiii_1997_9327)">
        <path
          d="M34.0007 4.96283C31.0703 2.74973 27.6024 1.37064 23.9583 0.975135C20.147 0.561475 16.2977 1.24055 12.8506 2.93431C9.40365 4.62804 6.49847 7.26777 4.4664 10.5509C2.43437 13.8339 1.35714 17.6281 1.35714 21.5C1.35714 25.3719 2.43437 29.1662 4.4664 32.4492C6.49847 35.7323 9.40365 38.372 12.8506 40.0657C16.2977 41.7595 20.147 42.4386 23.9583 42.0249C27.6024 41.6294 31.0703 40.2503 34.0007 38.0372C36.9309 40.2503 40.3984 41.6293 44.0425 42.0248C47.8538 42.4384 51.703 41.7593 55.15 40.0655C58.5969 38.3718 61.502 35.732 63.534 32.449C65.5659 29.1659 66.643 25.3717 66.6429 21.4999C66.643 17.6281 65.5659 13.8338 63.534 10.5508C61.502 7.26771 58.5969 4.62797 55.15 2.93422C51.703 1.24044 47.8538 0.561339 44.0425 0.974994C40.3984 1.3705 36.9309 2.74973 34.0007 4.96283ZM34.0003 36.3941C31.9047 34.6368 30.2026 32.445 29.0108 29.9641C27.7439 27.3271 27.0868 24.4329 27.0894 21.5006L27.0894 21.4994C27.0867 18.5671 27.7439 15.6729 29.0107 13.0359C30.2026 10.555 31.9047 8.3632 34.0003 6.60591C36.0941 8.36484 37.7947 10.5569 38.9865 13.0376C40.2532 15.6743 40.9115 18.5679 40.9115 21.4999C40.9115 24.4319 40.2532 27.3254 38.9865 29.9621C37.7947 32.4429 36.0941 34.6352 34.0003 36.3941Z"
          stroke="url(#paint0_linear_1997_9327)"
          stroke-width="1.28571"
        />
      </g>
      <defs>
        <filter
          id="filter0_iiii_1997_9327"
          x="0.713867"
          y="0.214111"
          width="66.5723"
          height="45.2717"
          filterUnits="userSpaceOnUse"
          color-interpolation-filters="sRGB"
        >
          <feFlood flood-opacity="0" result="BackgroundImageFix" />
          <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="0.225" />
          <feGaussianBlur stdDeviation="0.1125" />
          <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
          <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.16 0" />
          <feBlend mode="normal" in2="shape" result="effect1_innerShadow_1997_9327" />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="0.675" />
          <feGaussianBlur stdDeviation="0.3375" />
          <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
          <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
          <feBlend
            mode="normal"
            in2="effect1_innerShadow_1997_9327"
            result="effect2_innerShadow_1997_9327"
          />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="1.35" />
          <feGaussianBlur stdDeviation="0.675" />
          <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
          <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" />
          <feBlend
            mode="normal"
            in2="effect2_innerShadow_1997_9327"
            result="effect3_innerShadow_1997_9327"
          />
          <feColorMatrix
            in="SourceAlpha"
            type="matrix"
            values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
            result="hardAlpha"
          />
          <feOffset dy="2.7" />
          <feGaussianBlur stdDeviation="1.35" />
          <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
          <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" />
          <feBlend
            mode="normal"
            in2="effect3_innerShadow_1997_9327"
            result="effect4_innerShadow_1997_9327"
          />
        </filter>
        <linearGradient
          id="paint0_linear_1997_9327"
          x1="16.6286"
          y1="5.53544"
          x2="42.9152"
          y2="49.1775"
          gradientUnits="userSpaceOnUse"
        >
          <stop stop-color="white" />
          <stop offset="1" stop-color="#BDBDBD" />
        </linearGradient>
      </defs>
    </svg>
    """
  end
end
